﻿using BO;
using JMI_Nucleo.Classe;
using OR;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Linq;
using System.Data;

namespace CronosUtil
{
    public partial class FrmConEmpresa : JMI_Nucleo.View.Form_Base.FrmBaseConsulta
    {
        private Empresa empresa = new Empresa();
        private List<mEmpresa> lstEmpresa;
        private mEmpresa _mEmpresa;        
        
        public FrmConEmpresa()
        {
            InitializeComponent();
            objUtil = new JMIUtil();
        }

        private DataTable GeraTabelaTemp(List<mEmpresa> Lista)
        {
            tb.Columns.Add(new DataColumn("Codigo", typeof(int)));
            tb.Columns.Add(new DataColumn("Apelido", typeof(string)));
            tb.Columns.Add(new DataColumn("Nome", typeof(string)));
            tb.Columns.Add(new DataColumn("CNPJ", typeof(string)));
            tb.Columns.Add(new DataColumn("DataCadastro", typeof(DateTime)));
            tb.Columns.Add(new DataColumn("Telefone", typeof(string)));
            tb.Columns.Add(new DataColumn("Telefone1", typeof(string)));
            tb.Columns.Add(new DataColumn("Telefone2", typeof(string)));
            tb.Columns.Add(new DataColumn("Celular", typeof(string)));
            tb.Columns.Add(new DataColumn("Fax", typeof(string)));
            tb.Columns.Add(new DataColumn("Email1", typeof(string)));
            tb.Columns.Add(new DataColumn("Email2", typeof(string)));
            tb.Columns.Add(new DataColumn("Site", typeof(string)));
            tb.Columns.Add(new DataColumn("FoneComercial", typeof(string)));
            tb.Columns.Add(new DataColumn("Ativo", typeof(bool)));

            foreach (var item in Lista)
            {
                linha = tb.NewRow();
                linha["Codigo"] = item.Codigo;
                linha["Apelido"] = item.Pessoa.Apelido;
                linha["Nome"] = item.Pessoa.Nome;
                linha["CNPJ"] = item.Pessoa.CNPJ;
                linha["DataCadastro"] = item.DataCadastro;
                linha["Telefone"] = item.Contato.Telefone1;
                linha["Telefone1"] = item.Contato.Telefone2;
                linha["Telefone2"] = item.Contato.Telefone3;
                linha["Celular"] = item.Contato.Celular;
                linha["Fax"] = item.Contato.Fax;
                linha["Email1"] = item.Contato.Email1;
                linha["Email2"] = item.Contato.Email2;
                linha["Site"] = item.Contato.Site;
                linha["FoneComercial"] = item.Contato.FoneComercial;
                linha["Ativo"] = item.Ativo;
                tb.Rows.Add(linha);
            }
            return tb;
        }

        private void MontaGrade()
        {
            dgvConsulta.AutoGenerateColumns = false;
            
            DataGridViewTextBoxColumn colCodigo = CriaColuna("Codigo", "Código", 60);
            DataGridViewTextBoxColumn colNomeFantasia = CriaColuna("Apelido", "Nome Fantasia", 340);
            DataGridViewTextBoxColumn colDataCadastro = CriaColuna("DataCadastro", "Data Cadastro", 100);
            DataGridViewTextBoxColumn colTelefone = CriaColuna("Telefone", "Telefone", 120);
            DataGridViewTextBoxColumn colAtivo = CriaColuna("Ativo", "Ativo", 50);

            dgvConsulta.Columns.Add(colCodigo);
            dgvConsulta.Columns.Add(colNomeFantasia);
            dgvConsulta.Columns.Add(colDataCadastro);
            dgvConsulta.Columns.Add(colTelefone);
            dgvConsulta.Columns.Add(colAtivo);
        }

        private void IniciaConsulta()
        {
            pnlDetalhe.Visible = true;
            lblCnpj.Text = String.Empty;
            lblDataCadastro.Text = String.Empty;
            lblRazaoSocial.Text = String.Empty;
            MontaGrade();
            _mEmpresa = new mEmpresa();
            _mEmpresa.Pessoa.Apelido = String.Empty;
            _mEmpresa.Pessoa.Nome = String.Empty;
            _mEmpresa.Pessoa.CNPJ = String.Empty;

            cboOpcao.Items.Add("Nome Fantasia");
            cboOpcao.Items.Add("CNPJ");
            
            lstEmpresa = empresa.GetListaPorFiltro(_mEmpresa);

            CarregaBS();

            lblTitulo.Text = Titulo;
            TxtPesquisa.Focus();
        }

        private void CarregaBS()
        {
            this.Cursor = Cursors.WaitCursor;
            DataTable tbLocal = GeraTabelaTemp(lstEmpresa);
            this.Cursor = Cursors.Default;
            bsConEmpresa.DataSource = null;
            dgvConsulta.DataSource = null;
            dgvConsulta.Rows.Clear();
            dgvConsulta.Refresh();

            BtnAnterior.Enabled = false;
            BtnProximo.Enabled = false;
            if (lstEmpresa.Count > 0)
            {
                bsConEmpresa.DataSource = tbLocal;
                dgvConsulta.DataSource = bsConEmpresa;
                bsConEmpresa.ResetCurrentItem();

                indice = 0;
                ExibeDetalhe();
                BtnProximo.Enabled = true;
            }
        }

        private void LimpaControle()
        {
            lblRazaoSocial.Text = String.Empty;
            lblCnpj.Text = String.Empty;
            lblDataCadastro.Text = String.Empty;
        }

        private void ExibeDetalhe()
        {
            if (indice >= 0)
            {
                lblRazaoSocial.Text = tb.Rows[indice]["Nome"].ToString();
                lblCnpj.Text = tb.Rows[indice]["CNPJ"].ToString();
                lblDataCadastro.Text = Convert.ToDateTime(tb.Rows[indice]["DataCadastro"]).ToShortDateString();
                lblTelefone1.Text = tb.Rows[indice]["Telefone"].ToString();
                lblTelefone2.Text = tb.Rows[indice]["Telefone1"].ToString();
                lblTelefone3.Text = tb.Rows[indice]["Telefone2"].ToString();
                lblCelular.Text = tb.Rows[indice]["Celular"].ToString();
                lblFax.Text = tb.Rows[indice]["Fax"].ToString();
                lblEmail1.Text = tb.Rows[indice]["Email1"].ToString();
                lblEmail2.Text = tb.Rows[indice]["Email2"].ToString();
                lblFoneComercial.Text = tb.Rows[indice]["FoneComercial"].ToString();
                lblSite.Text = tb.Rows[indice]["Site"].ToString();
                lblAtivo.Text = Convert.ToBoolean(tb.Rows[indice]["Ativo"]) ? "SIM" : "NÃO";
            }
        }
        
        private void FrmConEmpresa_Load(object sender, EventArgs e)
        {
            IniciaConsulta();
        }

        private void TxtPesquisa_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(TxtPesquisa.Text))
            {
                if (!String.IsNullOrEmpty(bsConEmpresa.Filter))
                    bsConEmpresa.RemoveFilter();
                CarregaBS();
            }
            else
            {
                bsConEmpresa.Filter = "Apelido LIKE '%" + TxtPesquisa.Text + "%'";
            }
        }
 
        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bsConEmpresa.MovePrevious();
            indice = bsConEmpresa.Position;
            ExibeDetalhe();
            contador--;
            if (contador == 0)
            {
                BtnProximo.Enabled = true;
                BtnAnterior.Enabled = false;                
            }
        }

        private void BtnProximo_Click(object sender, EventArgs e)
        {
            bsConEmpresa.MoveNext();
            indice = bsConEmpresa.Position;
            ExibeDetalhe();
            contador++;
            if (contador == bsConEmpresa.Count -1)
            {
                BtnAnterior.Enabled = true;
                BtnProximo.Enabled = false;
            }
        }

        protected override void BotaoOK()
        {
            if (linha.ItemArray.Length > 0)
                CampoRetorno = Convert.ToInt32(linha["codigo"]);
            Close();
        }

        protected override void BotaoFiltrar()
        {
            if (!String.IsNullOrEmpty(bsConEmpresa.Filter))
                bsConEmpresa.RemoveFilter();
            if (!String.IsNullOrEmpty(cboOpcao.Text) && !String.IsNullOrEmpty(TxtPesquisa.Text))
            {
                if (cboOpcao.Text == "Nome Fantasia")
                    bsConEmpresa.Filter = "Nome = '" + TxtPesquisa.Text + "'";
                else if (cboOpcao.Text == "CNPJ")
                    bsConEmpresa.Filter = "CNPJ = '" + TxtPesquisa.Text + "'";
            }
        }
                
        private void bsConEmpresa_CurrentItemChanged(object sender, EventArgs e)
        {
            if (bsConEmpresa != null)
                linha = ((DataRowView)bsConEmpresa.Current).Row;
        }
    }
}
